#!/bin/bash
################################################################################
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
# limitations under the License.
################################################################################

##
# Functions
##

# set -x


# Source: http://stackoverflow.com/a/4025065/568695
vercomp () {
    if [[ $1 == $2 ]]
    then
        return 0
    fi
    local IFS=.
    local i ver1=($1) ver2=($2)
    # fill empty fields in ver1 with zeros
    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
    do
        ver1[i]=0
    done
    for ((i=0; i<${#ver1[@]}; i++))
    do
        if [[ -z ${ver2[i]} ]]
        then
            # fill empty fields in ver2 with zeros
            ver2[i]=0
        fi
        if ((10#${ver1[i]} > 10#${ver2[i]}))
        then
            return 1
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            return 2
        fi
    done
    return 0
}

# arguments <branch name> <dirName>
function checkoutDocsForVersionInBranch() {
    BRANCH=$1
    DIR=$2
    echo "Checking out docs from branch '$BRANCH' into dir '$DIR' "

    cd flink-src-repo
    git checkout $BRANCH
    git clean -d -f

    cd docs

    # we are in _root_/flink-src-repo/docs
    export BUILD_API=1
    jekyll build  --destination ../../docs/$DIR

    # Go back to root of flink website
    cd ../../
}

# no args
function updateDocsDir() {
    echo "Clone if necessary"
    if [ ! -d "flink-src-repo" ]; then
        git clone http://git-wip-us.apache.org/repos/asf/flink.git flink-src-repo
    fi
    if [ ! -d "docs" ]; then
        mkdir docs
    fi
    echo "Fetch rep"
    cd flink-src-repo
    git fetch
    cd ..

    echo "Create docs for versions"
#   checkoutDocsForVersionInBranch "documentation" "0.5"
    checkoutDocsForVersionInBranch "origin/release-0.8" "0.8"
    checkoutDocsForVersionInBranch "origin/release-0.7" "0.7-incubating"
    checkoutDocsForVersionInBranch "origin/release-0.6.2" "0.6-incubating"
}

##
# Main body
##


HAS_JEKYLL=true

command -v jekyll > /dev/null
if [ $? -ne 0 ]; then
    echo -n "ERROR: Could not find jekyll. "
    echo "Please install with 'gem install jekyll' (see http://jekyllrb.com)."

    HAS_JEKYLL=false
fi

JEKYLL_VERSION=`jekyll --version | cut -d' ' -f2`
vercomp $JEKYLL_VERSION "2.1.0"

if [ "$?" == "2" ]; then
    echo "Please use at least jekyll version 2.1.0 instead of '$JEKYLL_VERSION'"
    exit 1
fi

command -v redcarpet > /dev/null
if [ $? -ne 0 ]; then
    echo -n "WARN: Could not find redcarpet. "
    echo -n "Please install with 'sudo gem install redcarpet' (see https://github.com/vmg/redcarpet). "
    echo "Redcarpet is needed for Markdown parsing and table of contents generation."
fi

command -v pygmentize > /dev/null
if [ $? -ne 0 ]; then
    echo -n "WARN: Could not find pygments. "
    echo -n "Please install with 'sudo easy_install pygments' (requires Python; see http://pygments.org). "
    echo "Pygments is needed for syntax highlighting of the code examples."
fi

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

SRC=${DIR}
DST=${SRC}/content

# default jekyll command is to just build site
JEKYLL_CMD="build"



OPTIND=1
# if -p flag is provided, serve site on localhost
while getopts ":up" opt; do
    case $opt in
        p)
            JEKYLL_CMD="serve --watch"
            ;;
        u)
            echo "updating docs from repository"
            updateDocsDir
            ;;
    esac
done

# integrate documentation

if $HAS_JEKYLL; then
    jekyll ${JEKYLL_CMD} --source ${SRC} --destination ${DST}
fi
